Introduction

在这个项目中,我将分析的是白葡萄酒数据,数据来源于:
P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. Modeling wine preferences by data mining from physicochemical properties. In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236

##  [1] "X"                    "fixed.acidity"        "volatile.acidity"    
##  [4] "citric.acid"          "residual.sugar"       "chlorides"           
##  [7] "free.sulfur.dioxide"  "total.sulfur.dioxide" "density"             
## [10] "pH"                   "sulphates"            "alcohol"             
## [13] "quality"
## 'data.frame':    4898 obs. of  13 variables:
##  $ X                   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ fixed.acidity       : num  7 6.3 8.1 7.2 7.2 8.1 6.2 7 6.3 8.1 ...
##  $ volatile.acidity    : num  0.27 0.3 0.28 0.23 0.23 0.28 0.32 0.27 0.3 0.22 ...
##  $ citric.acid         : num  0.36 0.34 0.4 0.32 0.32 0.4 0.16 0.36 0.34 0.43 ...
##  $ residual.sugar      : num  20.7 1.6 6.9 8.5 8.5 6.9 7 20.7 1.6 1.5 ...
##  $ chlorides           : num  0.045 0.049 0.05 0.058 0.058 0.05 0.045 0.045 0.049 0.044 ...
##  $ free.sulfur.dioxide : num  45 14 30 47 47 30 30 45 14 28 ...
##  $ total.sulfur.dioxide: num  170 132 97 186 186 97 136 170 132 129 ...
##  $ density             : num  1.001 0.994 0.995 0.996 0.996 ...
##  $ pH                  : num  3 3.3 3.26 3.19 3.19 3.26 3.18 3 3.3 3.22 ...
##  $ sulphates           : num  0.45 0.49 0.44 0.4 0.4 0.44 0.47 0.45 0.49 0.45 ...
##  $ alcohol             : num  8.8 9.5 10.1 9.9 9.9 10.1 9.6 8.8 9.5 11 ...
##  $ quality             : int  6 6 6 6 6 6 6 6 6 6 ...

读取csv文件并查看数据结构,可以看到这个数据集中包含4898种白葡萄酒的的数据,数据的第一列是葡萄酒的编号,最后一列是其品质的评分(0-10),其余11列分别记录了葡萄酒的一项理化因子。

在这个项目中,我将首先对数据集中的各个变量做单变量分析,探究白葡萄酒中各种理化因子的分布特征;然后挑选部分变量双变量分析,探寻变量之间的关系及与白葡萄酒品质相关的因素,并计算相关统计值;最后对于双变量分析中有趣的组合中,我会尝试在其中添加更多的变量,探寻多变量之间的关系。

单变量分析

品质(quality)

## 
##    3    4    5    6    7    8    9 
##   20  163 1457 2198  880  175    5
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.000   5.000   6.000   5.878   6.000   9.000

白葡萄酒的品质最低为3,最高为9,分布近似正态,中位数为6,平均数也近似为6。 因为品质为3和9的酒数量太少,不妨把3和4、8和9合并,把葡萄酒的品质分组为’terrible’,‘bad’,‘average’,‘good’,’excellent’五组并绘图,可以得到:

酸类(acidity)

数据集中给出了白葡萄酒中非挥发性酸(fixed.acidity),挥发性酸(volatile.acidity,主要是醋酸)和柠檬酸(citric.acid)的含量,把挥发性和非挥发性酸相加可以得到酸的总含量,分别绘制三种酸及酸总含量分布的条形图: 可以看出酒中这三种酸的含量都接近正态分布,但具体的含量差距很大,最多的是非挥发性酸,含量大约为\(5-9g/L\),挥发性酸的含量大约为\(0.1-0.5g/L\),柠檬酸的含量为\(0-0.6g/L\),酸的总含量大约为\(6-10g/L\)。 可以看到四幅图中都存在长尾,所以我决定通过设置坐标轴范围在图中排除含量最高1%的数据,可以得到:

残留糖分(residual.sugar)

绘制残留糖分分布的条形图(图中同样排除了最高1%的极值,下略),可以看出残留糖分越高的酒数量越少,大部分酒中的残留糖分比较低,分布的峰值出现在\((0.5 - 2g/L)\),但也有不少酒中残留糖分较高。

氯化物(chlorides)

酒中氯化物的含量都很低,约为\(0.02-0.06g/L\)

硫化物(sulphides)

数据集中有三项与硫化物有关,分别是游离二氧化硫(free sulfur dioxide,单位\(mg/L\))、总二氧化硫(total sulfur dioxide,单位\(mg/L\))和硫酸盐(sulphates,单位\(g/L\))。因为二氧化硫的单位与数据集中的其他数据都不统一,先变换其单位(除以1000),并计算硫化物的总含量,分别绘图可得:

硫化物的含量都呈现正态分布,从条形图上看起来非常相似。游离\(SO_2\)含量最少,只有\(0.01-0.07g/L\);总\(SO_2\)量也很低,大约为\(0.05-0.22g/L\);硫酸盐含量较高,大约\(0.2-0.7g/L\);硫化物总量为\(0.25-1g/L\)
如果进一步计算硫化物中\(SO_2\)的比例和\(SO_2\)中游离态的比例,可以得到:

白葡萄酒的酒硫化物中\(SO_2\)的比例约为\(0.1-0.4\),其中游离态\(SO_2\)一般小于\(0.4\)

密度(density)

从图中可以看出,大部分葡萄酒的密度都在\(0.99-1g/mL\)的区间内,少部分酒密度超过了1,即大于水的密度。

酸碱性(pH)

白葡萄酒的pH值是标准的正态分布,大部分酒的pH值在2.8-3.6之间,呈弱酸性。

酒精浓度(alcohol)

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    8.00    9.50   10.40   10.51   11.40   14.20

大部分白葡萄酒的酒精浓度在9%-13%之间,调用summary计算可知酒精浓度的均值与中位数都在10.5%附近。

Q&A

What is the structure of your dataset?

原始数据集记录了4898种白葡萄酒的13项数据,其中第一项是葡萄酒的编号,最后一列是其品质的评分(0-10),其余11项分别记录了葡萄酒的一项理化因子。
数据集中的各项变量都近似服从正态分布。

What is/are the main feature(s) of interest in your dataset?

这个数据集中我最感兴趣的变量是’quality’,即白葡萄酒品质的评分。这个数据集中葡萄酒品质评分的范围是3-9,其中评分为3和9的酒数量都比较少。所以我把评分3-4的酒合并记为’terrible’,评分8-9的酒合并记为’excellent’,如此把品质的评分分为了5档:‘terrible’,‘bad’,average’,‘good’,‘excellent’。

## 
##    3    4    5    6    7    8    9 
##   20  163 1457 2198  880  175    5
## 
##  terrible       bad   average      good excellent 
##       183      1457      2198       880       180

What other features in the dataset do you think will help support your investigation into your feature(s) of interest?

因为还没有进行双变量的分析,我在这里还无法确定哪些变量与酒的品质会有比较强的相关性。不过根据日常生活的经验,我想酒精浓度与酒的品质可能有比较强的相关性。酒中的各种化学成分的含量如不同种类的酸、氯化物、残留糖分、各种硫化物也会对酒的品质有一定的影响。

Did you create any new variables from existing variables in the dataset?

是的,我建立了新的品质评分分组quality_bucket;我还把不挥发性酸和挥发性酸的浓度相加得到了酒中酸的总浓度total.acidity,把二氧化硫和硫酸盐浓度相加得到了硫化物总浓度sulphides;我进一步计算了硫化物中二氧化硫的比例ratio.sulfur.dioxide和二氧化硫中游离态的比例ratio.free.sulfur.dioxide。

Of the features you investigated, were there any unusual distributions? Did you perform any operations on the data to tidy, adjust, or change the form of the data? If so, why did you do this?

事实上数据集本身已经足够完整,并且变量看起来都近似服从正态分布,所以我没有做太多额外的调整。数据集中出现了一些长尾,不过因为其中数据的范围本身就比较小,没有出现几个数量级的差异,不适合取对数坐标,所以我只是简单通过坐标轴设置排除了最高1%的极值。

双变量分析

相关系数矩阵

调用ggcorr函数绘制数据集的相关系数矩阵,图中呈现了数据集中各项数据之间的相关系数。
从图中来看,白葡萄酒的品质与酒精浓度相关系数较大,与其他因子都没有呈现明显的相关性。
葡萄酒的密度与硫化物含量、氯化物含量、残留糖分、非挥发性酸含量、酒精浓度等很多变量都呈现明显的相关性。
在这些变量中,我会选择自己感兴趣的组合做双变量分析。

品质 VS 酒精浓度

绘制白葡萄酒品质与酒精浓度的箱型图,整体看来,品质较好的酒酒精浓度的平均数和中位数都高于品质较差的酒。
异常出现在品质最差(‘terrible’)的一组酒中,它的平均值和中位数都比品质为’bad’的酒高。
同时,品质’bad’的酒中出现了很多酒精浓度较高的异常值。

品质 VS 酸类

四幅箱形图分别绘制了酒的品质与不挥发性酸、挥发性酸、柠檬酸和酸总量的关系,其中挥发性酸与酒品质的相关性最显著,可以明显看出品质越高的酒挥发性酸含量越低;从最后一幅图中可以看出质量越高的酒中酸的总浓度越低。其他两幅图的相关关系不明显,但可以看出’terrible’组拥有更高的非挥发性酸含量,以及更低的柠檬酸含量。

品质 VS 残留糖分

白葡萄酒品质与残留糖分没有呈现明显的相关关系,不过其中’terrible’组的残留糖分偏低。

品质 VS 氯化物含量

从箱形图中可以看出,品质越好的白葡萄酒含有的氯化物含量越低。

品质 VS 硫化物含量

分别绘制葡萄酒品质与游离\(SO_2\)、总\(SO_2\)、硫酸盐、总硫化物、硫化物中\(SO_2\)比例,\(SO_2\)中游离态的比例绘制箱形图,大部分图形中都看不出明显的相关关系,不过与游离态\(SO_2\)相关的两幅图中都可以看出,品质更好的白葡萄酒中游离态\(SO_2\)的含量和比例都更高。

酸的总含量 VS pH

绘制酒中酸的总含量与pH值的散点图,因为pH是通过取对数求出来的,在这里我把x轴也设置成对数坐标,果然得到了一条近似直线的拟合曲线。

密度 VS 酒精浓度

## 
##  Pearson's product-moment correlation
## 
## data:  wine$density and wine$alcohol
## t = -87.255, df = 4896, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.7908646 -0.7689315
## sample estimates:
##        cor 
## -0.7801376

酒的密度与酒精浓度呈现明显的负相关关系,相关系数达到了-0.78。

密度 VS 残留糖分

## 
##  Pearson's product-moment correlation
## 
## data:  wine$density and wine$residual.sugar
## t = 107.87, df = 4896, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8304732 0.8470698
## sample estimates:
##       cor 
## 0.8389665

葡萄酒的密度与残留糖分呈现明显的正相关,相关系数约为0.84。

酒精浓度 VS 残留糖分

## 
##  Pearson's product-moment correlation
## 
## data:  wine$alcohol and wine$residual.sugar
## t = -35.321, df = 4896, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4726723 -0.4280267
## sample estimates:
##        cor 
## -0.4506312

白葡萄酒中的酒精浓度与残留糖分也呈现出了负相关关系,相关系数约为-0.45。

游离态二氧化硫 VS 结合态二氧化硫

计算酒中结合态\(SO_2\)的含量(\(SO_2\)总量-游离态\(SO_2\)),绘制其与游离态\(SO_2\)含量的散点图;

## 
##  Pearson's product-moment correlation
## 
## data:  wine$free.sulfur.dioxide and wine$fixed.sulfur.dioxide
## t = 19.116, df = 4896, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2372821 0.2894077
## sample estimates:
##       cor 
## 0.2635373

酒中游离态\(SO_2\)和结合态\(SO_2\)呈现正相关的趋势,但相关关系并不显著,相关系数为0.26。

挥发性酸 VS 非挥发性酸

酒中的挥发性酸和非挥发性酸含量之间没有明显的相关关系。

Q&A

Talk about some of the relationships you observed in this part of the investigation. How did the feature(s) of interest vary with other features in the dataset?

在这一部分的分析,我逐个分析了白葡萄酒品质与各个变量的相关关系,发现相关性比较显著的变量包括:
1.酒精浓度:正相关,酒精浓度较高的酒一般品质较高;
2.挥发性酸浓度:负相关,挥发性酸浓度升高时酒的品质会显著下降;
3.氯化物浓度:负相关,品质越好的酒,氯化物含量越低;
4.游离态\(SO_2\)占总\(SO_2\)比例:正相关,游离态\(SO_2\)占比较高的酒品质一般也较好;
其余几个变量与葡萄酒的品质没有呈现明显的相关性。
除此之外,我还研究了酒中酸的总量与pH的关系,挥发性酸与非挥发性酸的关系,游离态\(SO_2\)和结合态\(SO_2\)的关系,密度、酒精浓度和残留糖分的关系等。

Did you observe any interesting relationships between the other features (not the main feature(s) of interest)?

我发现葡萄酒的密度、酒精浓度和残留糖分这三个变量两两相关:酒的密度与酒精浓度负相关,与残留糖分正相关,同时残留糖分与酒精浓度也呈现负相关关系。

What was the strongest relationship you found?

葡萄酒的密度与酒精浓度和残余糖分都是强相关的,相关系数都达到了0.8左右。

多变量分析

品质 VS 残留糖分 VS 酒精浓度

绘制酒精浓度和残留糖分的散点图,用葡萄的酒品质着色,对各种品质葡萄酒,都画出酒精浓度和残留糖分的线性回归曲线。可以看出酒精浓度和残留糖分之间存在负相关关系。观察颜色会发现品质较高的酒都分布在图的右侧,说明酒的品质和酒精浓度存在正相关,这与前文的发现是一致的。每条线性回归曲线都是向右下倾斜的,形状也大体相似,说明对不同品质的酒,酒精浓度和残留糖分的关系都是相似的。

密度 VS 酒精浓度 VS 残留糖分

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.9871  0.9917  0.9937  0.9940  0.9961  1.0390
## 
##  light median  heavy 
##    373   4287    238

观察白葡萄酒密度的统计值,按是否<=0.99和是否>=1将其分为三个区间,分别是’light’,‘median’,‘heavy’。

同样绘制酒精浓度与残留糖分的散点图,改为对密度着色,对不同密度的葡萄酒,都画出酒精浓度和残留糖分的线性回归曲线。可以看到较轻的葡萄酒都在右下端,即高酒精浓度、低残留糖分;较重的酒则在左上方,对应低酒精浓度和高残留糖分,这与前文中的发现是一致的。不过对于不同密度的酒,其残留糖分与酒精浓度的关系并不一样。对占了占据了葡萄酒大多数的密度’median’组中的酒,其线性回归曲线与总体曲线一致是向下倾斜的,即酒精浓度与残留糖分负正相关。不过对于较重和较轻的酒,它们的酒精浓度与残留糖分是正相关的。

## 
##  Pearson's product-moment correlation
## 
## data:  light_wine$alcohol and light_wine$residual.sugar
## t = 8.4435, df = 371, p-value = 7.032e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3126891 0.4833225
## sample estimates:
##      cor 
## 0.401484
## 
##  Pearson's product-moment correlation
## 
## data:  median_wine$alcohol and median_wine$residual.sugar
## t = -23.514, df = 4285, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.3643073 -0.3112723
## sample estimates:
##        cor 
## -0.3380582
## 
##  Pearson's product-moment correlation
## 
## data:  heavy_wine$alcohol and heavy_wine$residual.sugar
## t = 4.858, df = 236, p-value = 2.161e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.1813002 0.4128439
## sample estimates:
##       cor 
## 0.3015108

分别计算三组变量的相关系数,’light’组的相关系数为0.4,’median’组为-0.33,’heavy’组为0.3。

品质 VS 不同形态的二氧化硫

把前文中两种二氧化碳存在形式的散点图用葡萄酒品质着色,可以看出高品质的酒位于图片的左上部分,对应较高的游离态\(SO_2\)含量,和较低的结合态\(SO_2\)含量。无论对哪种品质的酒,游离态\(SO_2\)和结合态\(SO_2\)都呈现正相关,但是酒的品质越高,回归曲线的斜率越小。


Q&A

Talk about some of the relationships you observed in this part of the investigation. Were there features that strengthened each other in terms of looking at your feature(s) of interest?

这一部分中我先观察了品质、残留糖分和酒精浓度的关系,发现无论对于那种品质的葡萄酒,残留糖分和酒精浓度都是负相关的,且酒的品质与酒精浓度正相关,这与前文中的发现一致;随后我研究了密度、残留糖分和酒精浓度,发现残留糖分和酒精浓度的关系对不同密度的酒表现不一样;我还研究了品质、游离态\(SO_2\)、结合态\(SO_2\)的关系,发现品质较好的酒一般有更高游离态\(SO_2\)含量,且对任何品质的白葡萄酒,游离态\(SO_2\)和结合态\(SO_2\)都呈现正相关。

Were there any interesting or surprising interactions between features?

最意外的发现是对于较轻和较重的酒,它们残留糖分和酒精浓度的关系与大部分酒并不一样。大部分酒(密度0.99-0.999g/mL)残留糖分和酒精浓度负相关的,而较重和较轻的酒残留糖分和酒精浓度呈现正相关关系。

Did you create any models with your dataset? Discuss the strengths and limitations of your model

我建立了一个最简单的水中酸的总浓度与pH值的线性回归模型,用于计算酒中酸的电离度。
具体模型和计算方法在 Final Plot 3中。

Fianl Plot

Plot 1 与酒品质相关的因素

在前文的探索中我们已经对白葡萄酒的品质与各个因子做了双变量分析,发现与酒的品质明显相关的因素包括酒精浓度、挥发性酸含量、氯化物含量和游离态\(SO_2\)占态\(SO_2\)总量的比例等。画出酒的品质与这四个变量的箱形图,图中的蓝色虚线表示这个变量在所有样本中的平均值,从图中可以发现
酒精浓度:酒精浓度较高的酒一般品质较高,品质较好的酒其酒精浓度一般在11%以上,酒精浓度低于10%的酒一般品质较差;
挥发性酸:品质较好的酒一般具有较低的挥发性酸含量。从维基百科-葡萄酒中的酸页面中得知,白葡萄酒中的挥发性酸一般指醋酸,当醋酸浓度高时(高于0.3g/L)时葡萄酒的品质一般会显著下降;
氯化物:品质越好的酒,氯化物含量越低。氯化物含量低于0.04g/L的酒一般质量较好;
游离态\(SO_2\)所占的比例:品质越好的酒,游离态\(SO_2\)比例越高,比例低于0.2的酒往往质量很糟糕。

Plot 2 酒精浓度、残余糖分和酒的密度

绘制酒精浓度与残留糖分的散点图,对密度着色,并绘制不同密度的线性回归曲线。可以看到对密度’average’的白葡萄酒,酒精浓度与酒中的残留糖分存在负相关关系,在图中呈现为一条向下倾斜的线,而对于密度较轻或较重的酒,其酒精浓度与酒中的残留糖分是正相关的。因为白葡萄酒的酿造其实就是把有机糖通过微生物无氧呼吸转化为酒精的过程,所以对于大部分白葡萄酒来说,如果酒精浓度低,残留的糖分就会较多,反之亦然;对于较重和较亲的葡萄酒,它们可能并不是完全天然酿造的,而是在酿造过程中额外加入了糖分活着额外加入了酒精,所以产生了异常。
图中还揭示了酒的密度与酒精浓度和残留糖分的关系,不难看出当酒精浓度较高、残留糖分较少时酒的密度较低,反之酒精浓度低、残留糖分多时酒的密度较高;原因是酒精的浓度比水小,而有机糖类的密度比水大,所以很自然酒精增多会降低密度,糖类增多会增大酒的密度。其实除了有机糖外,酒中的各种酸、硫酸盐、氯酸盐等成分密度也大于水,所以它们的增加也会提升酒的密度,不过它们的含量较低且密度也没有糖大所以相关性不够显著。

Plot 3 酸的总含量与pH

因为pH值反映的本质是氢离子\(H^+\)浓度,利用公式\(pH=-lg([H^+])\)把pH重新转化为\(H^+\)浓度,绘制其与酒中酸质量浓度的散点图,可以看到呈现明显的正相关关系。
计算酸的质量浓度与\(H^+\)浓度的线性回归方程:

## 
## Calls:
## m1: lm(formula = I(total.acidity) ~ I(hydrion.ion), data = wine)
## 
## ================================
##   (Intercept)         6.045***  
##                      (0.035)    
##   I(hydrion.ion)   1585.011***  
##                     (47.808)    
## --------------------------------
##   R-squared           0.183     
##   adj. R-squared      0.183     
##   sigma               0.766     
##   F                1099.163     
##   p                   0.000     
##   Log-likelihood  -5643.540     
##   Deviance         2873.056     
##   AIC             11293.080     
##   BIC             11312.570     
##   N                4898         
## ================================

得到了回归方程:\(total.acidity = 1585.011*[H^+] + 6.045\)
事实上这个写法很不严谨,因为等式两边的单位并不统一,酸的浓度用的是质量浓度,而\(H^+\)用的是摩尔浓度。将质量浓度除以酒中酸的平均摩尔质量可以得到摩尔浓度。葡萄酒中的酸虽然种类很多,但主要以酒石酸为主,因此这里为了简化计算,我假设酒中的酸全部都是酒石酸,其摩尔质量是\(150.087 g/mol\),两侧相除得到新的回归方程:
\(total.acidity = 10.56*[H^+] + 0.04\)
此处关注的是斜率,所以忽略截距项,所以方程进一步简化为:酒中酸的浓度 = 10.56*氢离子的浓度
因为酒石酸是弱酸,在水中不能完全解离,所以酒中酸的浓度比氢离子的浓度高,并且可以进一步计算出酒中酸的平均解离度为1/(10.56+1) = 0.087,即有8.7%的酸在水中解离出了氢离子\(H^+\)

Reflction

在这个项目中,我探索了关于白葡萄酒品质的数据集,发现其中有几个变量的值与葡萄酒品质密切相关,但大部分变量与品质之间没有呈现明显的相关性。我还探索了与葡萄酒密度有关的因素,并通过数据集中酸的含量与pH的数据简单计算了酒中酸的电离度。
但应该说现在我对这个数据集的探索还处在很初步的阶段,我最多只研究了三个变量之间的关系,没有对更多变量进行探索;我只对酒的品质与单个变量做个定性的分析,没有考虑多个因素的共同作用,也没有建立定量的模型;最后对酸电离度的计算也很简略,没有考虑不同酸的类型,也没有考虑多元酸的二级解离。如果对数据进行进一步更深度的探索,我会尝试建立一个白葡萄酒品质预测的模型。
另一个我比较感性的点是三个专家对不同酒的评价会有多大的差异,那种类型的酒容易引发差异化的评价,可惜原始数据集中没有提供这方面的数据。